package com.renwen.sms.service;

import com.renwen.sms.dto.CourseDto;
import com.renwen.sms.dto.PageResult;
import com.renwen.sms.dto.StudentDto;
import com.renwen.sms.dto.XuanKeDto;
import com.renwen.sms.entity.*;
import com.renwen.sms.util.Result;




import java.util.Map;

/**
 * 学生业务逻辑接口类
 */
public interface StudentService {

    /**
     * 添加学生
     * @param  student
     */
    void save(Student student);
     /**
     * 修改学生
     * @param student 学生对象
     */
    void update(Student student);

    /**
     * 查询指定管理员操作下的所有学生列表
     * @param page 页码
     * @param size 每页显示条数
     * @param searchMap 搜索条件
     * @return 所有学生列表
     */
    PageResult<StudentDto> list(Integer page, Integer size, Map<String, Object> searchMap);

    /**
     * 根据学生编号查询学生信息
     * @param id 学生编号
     * @return 学生信息
     */
    Result get(Integer id);

    /**
     * 根据学生学号删除
     */
    void delete(String sNo);

    /**
     * 批量删除学生信息
     * @param ids 学生编号列表
     */
    void batchDelete(String ids);

    /**
     * 学生查询自己能选的课程信息
     * @param page 页码
     * @param size 每页显示条数
     * @param searchMap 搜索条件
     * @return 课程列表列表
     */
    PageResult<CourseDto> courseList(Integer page, Integer size, Map<String, Object> searchMap);

    /**
     * 查询所有成绩信息
     * @param page 页码
     * @param size 每页显示条数
     * @param searchMap 搜索条件
     * @return 成绩信息列表
     */
    PageResult<XuanKeDto> studentGradesList(Integer page, Integer size, Map<String, Object> searchMap);

    /**
     * 学生查询已完结课程信息
     * :根据教师号查询选课信息
     * @param page 页码
     * @param size 每页显示条数
     * @param searchMap 搜索条件
     * @return 已完结课程信息
     */
    PageResult<XuanKeDto> studentJieKeList(Integer page, Integer size, Map<String, Object> searchMap);

    /**
     * 导出学生表信息到桌面
     */
    void outStudent();

    /**
     * 学生网上选课
     */
    void studentXuanKe(String sNo,String cNo);

    /**
     * 学生取消选课
     */
    void delXuanKe(String cNo,String sNo);

    /**
     * 课程评价
     * @param pingJia
     */
    void pingJia(PingJia pingJia);
}
